package com.jzo2o.orders.manager.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jzo2o.common.utils.DateUtils;
import com.jzo2o.orders.base.mapper.OrdersMapper;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.manager.model.dto.request.PlaceOrderReqDTO;
import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;
import com.jzo2o.orders.manager.service.IOrdersCreateService;
import com.jzo2o.orders.manager.service.client.CustomerClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * <p>
 * 下单服务类
 * </p>
 *
 * @author itcast
 * @since 2023-07-10
 */
@Slf4j
@Service
public class OrdersCreateServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements IOrdersCreateService {


    @Autowired
   private CustomerClient client;
    @Autowired
   private StringRedisTemplate template ;
    private static final String ORDERID_SERIALNUM_KEY ="" ;



    @Override
    public PlaceOrderResDTO placeOrder(PlaceOrderReqDTO placeOrderReqDTO) {


        //1. 判断服务状态


        //2. 判断地址状态


        //3. 封装订单信息
        Orders orders = new Orders();

        //3.1 设置订单号
        //19位：2位年+2位月+2位日+13位序号


        //3.2 设置归属用户


        //3.3 设置服务基础信息


        //3.4 设置服务价格信息
        //TODO 判断优惠券状态  后面再做

        //3.5 设置消费者信息

        //3.6 设置其他信息
        // 排序字段 服务开始时间戳毫秒+订单号后5位


        //剩下这些不用管
        //是否展示 默认为1展示
        //支付时间 pay_time
        //评价时间 evaluation_time
        //支付服务交易单号 trading_order_no
        //第三方支付交易号 transaction_id
        //支付服务退款单号 refund_no
        //第三方支付退款单号 refund_id
        //支付渠道 trading_channel

        return new PlaceOrderResDTO(orders.getId());
    }
    @Override
    public Long generateOrderId() {
        //每次基于上一次的值进行原子自增
        Long newId = template.opsForValue().increment(ORDERID_SERIALNUM_KEY, 1);
        Long orderId = DateUtils.getFormatDate(LocalDateTime.now(),"yyMMdd") * 10000000000000L + newId;
        return orderId;
    }
}
